package org.jeecg.common.util;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.jetbrains.annotations.NotNull;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author ZhangYu
 * @date 2024/3/23 21:04
 * @description 参数拷贝工具类
 */
public class BeanCopyUtils {

    /**
     * 拷贝分页
     *
     * @param oldPage  旧的分页值
     * @param newClass 新的分页值
     * @param <O>      旧的类型
     * @param <N>      新的类型
     * @return 拷贝后的分页值
     */
    @NotNull
    public static <O, N> Page<N> copyPage(@NotNull final Page<O> oldPage, final Class<N> newClass) {
        Page<N> newPage = new Page<>();
        BeanUtil.copyProperties(oldPage, newPage, "records");
        newPage.setRecords(oldPage.getRecords().stream().map(oldClass -> BeanUtil.copyProperties(oldClass, newClass)).collect(Collectors.toList()));
        return newPage;
    }

    /**
     * 拷贝新类
     *
     * @param oldClass 旧的参数值
     * @param newClass 新的类型
     * @param <O>      旧的类型
     * @param <N>      新的类型
     * @return 拷贝后的值
     */
    public static <O, N> N copyNewBean(@NotNull final O oldClass, final Class<N> newClass) {
        return BeanUtil.copyProperties(oldClass, newClass, "id", "delFlag", "create_time", "update_time");
    }

    /**
     * 拷贝列表
     *
     * @param oldList  旧的列表
     * @param newClass 新的列表
     * @param <O>      旧的类型
     * @param <N>      新的类型
     * @return 拷贝后的分页值
     */
    @NotNull
    public static <O, N> List<N> copyList(@NotNull final List<O> oldList, final Class<N> newClass) {
        return oldList.stream().map(oldClass -> BeanUtil.copyProperties(oldClass, newClass)).collect(Collectors.toList());
    }

}
